/* * Copyright 2014 OpenRQ Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.fec.openrq.parameters; import static org.junit.Assert.assertEquals; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.nio.ReadOnlyBufferException; import java.nio.channels.Pipe; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import net.fec.openrq.Parsed; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * Tests the read/write methods of class FECParameters. */ public class FECParametersReadWriteTest { private static final FECParameters PARAMS = FECParameters.newParameters(10_000, 100, 1); // for I/O private static ExecutorService executor; @BeforeClass public static void initExecutor() { executor = Executors.newFixedThreadPool(1); } @AfterClass public static void shutdownExecutor() throws InterruptedException { executor.shutdown(); executor.awaitTermination(2L, TimeUnit.SECONDS); } @Test public void testAsSerializable() { final SerializableParameters serParams = PARAMS.asSerializable(); final Parsed<FECParameters> parsed = FECParameters.parse(serParams); assertEquals(PARAMS, parsed.value()); } @Test public void testAsArray() { final byte[] array = PARAMS.asArray(); final Parsed<FECParameters> parsed = FECParameters.parse(array); assertEquals(PARAMS, parsed.value()); } @Test public void testWriteToArray() { final byte[] array = new byte[12]; PARAMS.writeTo(array); final Parsed<FECParameters> parsed = FECParameters.parse(array); assertEquals(PARAMS, parsed.value()); } @Test(expected = IndexOutOfBoundsException.class) public void testWriteToArrayException() { final byte[] array = new byte[11]; PARAMS.writeTo(array); } @Test public void testWriteToArrayOffset() { final byte[] array = new byte[24]; final int off = 12; PARAMS.writeTo(array, off); final Parsed<FECParameters> parsed = FECParameters.parse(array, off); assertEquals(PARAMS, parsed.value()); } @Test(expected = IndexOutOfBoundsException.class) public void testWriteToArrayOffsetExceptionNegOffset() { final byte[] array = new byte[24]; final int off = -1; PARAMS.writeTo(array, off); } @Test(expected = IndexOutOfBoundsException.class) public void testWriteToArrayOffsetExceptionSmallArray() { final byte[] array = new byte[24]; final int off = 13; PARAMS.writeTo(array, off); } @Test public void testAsBuffer() { final ByteBuffer buffer = PARAMS.asBuffer(); final Parsed<FECParameters> parsed = FECParameters.parse(buffer); assertEquals(PARAMS, parsed.value()); } @Test public void testWriteToBuffer() { final ByteBuffer buffer = ByteBuffer.allocate(12); PARAMS.writeTo(buffer); buffer.rewind(); final Parsed<FECParameters> parsed = FECParameters.parse(buffer); assertEquals(PARAMS, parsed.value()); } @Test(expected = ReadOnlyBufferException.class) public void testWriteToBufferExceptionReadOnlyBuffer() { final ByteBuffer buffer = ByteBuffer.allocate(12); PARAMS.writeTo(buffer.asReadOnlyBuffer()); } @Test(expected = BufferOverflowException.class) public void testWriteToBufferExceptionBufferOverflow() { final ByteBuffer buffer = ByteBuffer.allocate(11); PARAMS.writeTo(buffer); } @Test(timeout = 5000) public void testWriteToDataOutput() throws IOException { final PipedInputStream in = new PipedInputStream(); final PipedOutputStream out = new PipedOutputStream(in); executor.execute(new Runnable() { @Override public void run() { try { PARAMS.writeTo(new DataOutputStream(out)); } catch (IOException e) { e.printStackTrace(); } } }); final Parsed<FECParameters> parsed = FECParameters.readFrom(new DataInputStream(in)); assertEquals(PARAMS, parsed.value()); } @Test(timeout = 5000) public void testWriteToByteChannel() throws IOException { final Pipe pipe = Pipe.open(); executor.execute(new Runnable() { @Override public void run() { try { PARAMS.writeTo(pipe.sink()); } catch (IOException e) { e.printStackTrace(); } } }); final Parsed<FECParameters> parsed = FECParameters.readFrom(pipe.source()); assertEquals(PARAMS, parsed.value()); } }